package cn.iocoder.yudao.module.im.service.member;

import javax.validation.*;
import cn.iocoder.yudao.module.im.controller.admin.member.vo.*;
import cn.iocoder.yudao.module.im.controller.app.member.vo.AppMemberConversationPageReqVO;
import cn.iocoder.yudao.module.im.controller.app.member.vo.AppMemberConversationSaveReqVO;
import cn.iocoder.yudao.module.im.dal.dataobject.member.MemberConversationDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * IM会话 Service 接口
 *
 * @author Jerry
 */
public interface MemberConversationService {

    /**
     * 创建IM会话
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createMemberConversation(@Valid MemberConversationSaveReqVO createReqVO);

    /**
     * 创建IM会话
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createMemberConversation(Long loginUserId, @Valid AppMemberConversationSaveReqVO createReqVO);

    /**
     * 更新IM会话
     *
     * @param updateReqVO 更新信息
     */
    void updateMemberConversation(@Valid MemberConversationSaveReqVO updateReqVO);

    /**
     * 更新IM会话
     *
     * @param updateReqVO 更新信息
     */
    void updateMemberConversation(@Valid AppMemberConversationSaveReqVO updateReqVO);

    /**
     * 删除IM会话
     *
     * @param id 编号
     */
    void deleteMemberConversation(Long id);

    /**
     * 获得IM会话
     *
     * @param id 编号
     * @return IM会话
     */
    MemberConversationDO getMemberConversation(Long id);

    /**
     * 获得IM会话分页
     *
     * @param pageReqVO 分页查询
     * @return IM会话分页
     */
    PageResult<MemberConversationDO> getMemberConversationPage(MemberConversationPageReqVO pageReqVO);

    /**
     * 获得IM会话分页
     *
     * @param pageReqVO 分页查询
     * @return IM会话分页
     */
    PageResult<MemberConversationDO> getMemberConversationPage(AppMemberConversationPageReqVO pageReqVO);

    void updateUnReadCount(Long messageId);

    void pinnedMemberConversation(AppMemberConversationSaveReqVO updateReqVO);

    void slashedMemberConversation(Long id);

    MemberConversationRespVO getRandomMemberConversation(Long userId);
}